package 每日一题;

/**
 * 2810. 故障键盘
 * 简单
 * 相关标签
 * 相关企业
 * 提示
 * 你的笔记本键盘存在故障，每当你在上面输入字符 'i' 时，它会反转你所写的字符串。而输入其他字符则可以正常工作。
 *
 * 给你一个下标从 0 开始的字符串 s ，请你用故障键盘依次输入每个字符。
 *
 * 返回最终笔记本屏幕上输出的字符串。
 *
 *
 *
 * 示例 1：
 *
 * 输入：s = "string"
 * 输出："rtsng"
 * 解释：
 * 输入第 1 个字符后，屏幕上的文本是："s" 。
 * 输入第 2 个字符后，屏幕上的文本是："st" 。
 * 输入第 3 个字符后，屏幕上的文本是："str" 。
 * 因为第 4 个字符是 'i' ，屏幕上的文本被反转，变成 "rts" 。
 * 输入第 5 个字符后，屏幕上的文本是："rtsn" 。
 * 输入第 6 个字符后，屏幕上的文本是： "rtsng" 。
 * 因此，返回 "rtsng" 。
 */
public class T2810_故障键盘 {

    //使用两个数组 第一个从右往左填 ,第二个从左往右填
    // 使用双端队列
    public String finalString(String s) {

        char[] chars = s.toCharArray();

        char[] c1 = new char[s.length()];
        char[] c2 = new char[s.length()];

        int c1Index = c1.length-1;

        int c2Index = 0;

        boolean flag = true;

        //默认 从第二个数组 从左往右填 遇到i 换填一个数组
        for (int i = 0; i < chars.length; i++) {

            if (chars[i]=='i'){
                flag = !flag;
                continue;
            }

            if (flag){
                c2[c2Index] = chars[i];
                c2Index++;
            }else {
                c1[c1Index]=chars[i];
                c1Index--;
            }

        }

        StringBuilder builder = new StringBuilder();

        if (flag) {
            //从左往右
            for (int i = c1Index + 1; i < c1.length; i++) {
                builder.append(c1[i]);
            }

            for (int i = 0; i < c2Index; i++) {
                builder.append(c2[i]);
            }
        } else {
            //翻转 从右往左
            for (int i = c2Index - 1; i >= 0; i--) {
                builder.append(c2[i]);
            }
            for (int i = c1.length - 1; i > c1Index; i--) {
                builder.append(c1[i]);
            }
        }


        return builder.toString();

    }

    public static void main(String[] args) {
        T2810_故障键盘 test = new T2810_故障键盘();
        test.finalString("string");
    }
}
